package com.zueb.service.impl;

import com.zueb.mapper.OutApplyMapper;
import com.zueb.mapper.UserMapper;
import com.zueb.pojo.OutApply;
import com.zueb.service.OutApplyService;
import com.zueb.util.PageUtils;
import com.zueb.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class OutApplyServiceImpl implements OutApplyService {
    //1. 创建SqlSessionFactory 工厂对象
    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();


    @Override
    public int addApply( OutApply outApply) {
        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession(true);
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);
        //调用方法
        int i = outApplyMapper.addApply(outApply);
        //释放资源
        sqlSession.close();

        return i;
    }

    @Override
    public List<OutApply> showAppliesBypage(int curPage, int pageSize, int facultyId, int classId) {

        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession(true);
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);
        //调用方法
        int index = PageUtils.getIndex(curPage, pageSize);
        List<OutApply>  outApplies =  outApplyMapper.showAppliesBypage(index, pageSize, facultyId, classId);
        //释放资源
        sqlSession.close();
        return outApplies;
    }

    @Override
    public int getApplyCount(int facultyId, int classId) {
        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession(true);
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);
        //调用方法
        int count =  outApplyMapper.getApplyCount(facultyId, classId);
        //释放资源
        sqlSession.close();
        return count;
    }

    @Override
    public int agreeApply(int userId, int outApplyId) {
        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用方法
        int flag =  outApplyMapper.agreeApply(outApplyId);
        int flag2 = userMapper.accessApply(userId);
        if (flag == flag2) {
            sqlSession.commit();
        } else {
            sqlSession.rollback();
        }
        //释放资源
        sqlSession.close();
        return flag;
    }

    @Override
    public int refuseApply(int userId, int outApplyId) {
        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用方法
        int flag =  outApplyMapper.refuseApply(outApplyId);
        int flag2 = userMapper.refuseApply(userId);

        if (flag == flag2) {
            sqlSession.commit();
        } else {
            sqlSession.rollback();
        }
        //释放资源
        sqlSession.close();
        return flag;
    }

    @Override
    public List<OutApply> getApplyByUserId(OutApply outApply) {

        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);

        List<OutApply> outApplies = outApplyMapper.getApplyByUserId(outApply);

        sqlSession.close();
        return outApplies;

    }

    @Override
    public int editApply(OutApply outApply) {
        //获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //获取Mapper
        OutApplyMapper outApplyMapper = sqlSession.getMapper(OutApplyMapper.class);

        int flag = outApplyMapper.editApply(outApply);

        sqlSession.commit();
        sqlSession.close();
        return flag;
    }
}
